package EnumDemo;

/**
 * @Description :
 * @author: cww
 * @DateTime: 2018-07-29 10:28
 * 背景：周一至周日使用0-6来表示，但是开发人员在开发的时候不一定知道周日是使用0，而是使用了7，在编译的时候
 * 程序是不会出错的，但是在运行的时候，业务是会出问题的，所以使用一个类来预先规定好需要使用使用感到的对象的
 * 属性(值)，这样，在程序编译的时候就能知道对象创建后是否是正确的
 */

public class EnumStatic {
    public static void main(String[] args) {
        /**
         * 构造函数私有化后外部就不能调用该对象的构造函数来创建对象了
         */
//        WeakDay weakDay = new WeakDay();
        /**
         *
         * WeakDay的常量赋值给WeakDay的引用变量weakDay
         * 也就是任何赋值给引用变量的常量都是类里面定义好的，这就是枚举
         *
         */
        WeakDay weakDay = WeakDay.MON;
        System.out.println(weakDay.toString());

        /**
         * 方法1
         */
        System.out.println("======使用if else 来判断需要返回的值");
        WeakDay weakDay1 = WeakDay.MON.netDay();
        System.out.println(weakDay1.toString());


        /**
         * 方法2
         */
        System.out.println("=====使用抽象方法的匿名内部类来返回需要返回的值");
        WeakDayAbstract weakDayAbstract = WeakDayAbstract.SUM;
        System.out.println(weakDayAbstract.nextDay());

        /**
         * 枚举的基本应用
         */
        WeakDayByEnum weakDayByEnum =WeakDayByEnum.FRI;
        System.out.println(weakDayByEnum);
        System.out.println(weakDayByEnum.name());
        //当前值在枚举类中的第几个
        System.out.println(weakDayByEnum.ordinal());
        System.out.println(WeakDayByEnum.valueOf("SUM"));
        System.out.println(WeakDayByEnum.values().length);


        /**
         * 带有抽象方法的枚举类
         */
        EnumAbstract enumAbstract = EnumAbstract.GREEN.nextLamp();
        System.out.println(enumAbstract);
        System.out.println(enumAbstract.getTemp());

    }

    public enum WeakDayByEnum{
        SUM(2),MON(),TUE,WED,THI,FRI,SAT;
        private WeakDayByEnum(){
            System.out.println("first");
        };

        /**
         * 带参的构造方法
         * @param x
         */
        private WeakDayByEnum(int x){
            System.out.println("second");
        };
    }
}
